This invention relates to the field of computer systems. More particularly, a system and methods are provided for supporting multiple protocols, at one level of a protocol stack, with a single device driver.
SRP is a protocol designed for use in a bidirectional, counter-rotating ring network. An inner ring carries data in one direction, while an outer ring carries data in the opposite direction. Both rings are used concurrently.
Each node in the network is coupled to both rings, and therefore employs multiple (e.g., two) network interface circuits (NIC) or devices. In present implementations of SRP, a node manages two communication streams—one for each connection. Although SRP functions can be implemented in separate Streams modules, between the device driver and the higher level protocol (e.g., IP), the SRP protocol requires short response times, and the use of separate SRP stream modules can introduce additional software overhead and lead to unacceptable response times.
Despite the need to know the current network topology, so that each packet can be routed through the appropriate ring, the SRP specification does not indicate how the network topology should be recorded or represented. If an inefficient method is employed, many packets could be routed incorrectly.
Also, traditional network interface device drivers are configured to support only a single link level communication protocol (e.g., just SRP). Such a device driver may be hard-coded with attributes or parameters of that protocol (e.g., maximum transfer unit size). Therefore, if a different protocol is to be used (e.g., PPP—Point-to-Point Protocol), a different device driver must be installed or loaded. This causes redundancy of coding if there are any similarities between the different protocols, and both drivers must be updated if common functionality is changed.
In addition, a traditional physical communication interface device, such as a NIC, hosts a single logical communication device for a computer system. Therefore, the operating system of the computer only needs to execute a single attach (or detach) procedure to attach (or detach) a device driver for operating the physical device.
The use of multiple logical or physical communication devices, instead of a single device, can offer gains in communication efficiency. Although attempts have been made to operate multiple physical communication devices on a single computer board or card, it has been unknown to operate multiple logical devices on a single physical communication device in a manner that requires multiple device driver attaches.
And further, the programming for a hardware device (e.g., a NIC) controlled via an FPGA (Field Programmable Gate Array), or other similar component, is often stored on a programmable read-only memory such as an EEPROM (Electrically Erasable Programmable Read Only Memory). The EEPROM contents must be re-flashed whenever the programming changes. The device's firmware may also need to be changed, along with the hardware revision, which may be an expensive process. And, updating the device's programming requires the read-only memory to be re-flashed with the new program logic—a procedure that typically cannot be performed by an average user. This makes it difficult to keep hardware devices' programming up-to-date.